mutex, WaitForSingleObject a ReleaseMutex

Otázka od: Karel Plechota

8. 6. 2004 10:25

zdravim,

mam jen drobny dotaz, zkousel jsem v jednom threadu nekolikrat po sobe zavolat
WaitForSingleObject pro mutex a pak jedenkrat v tom samem threadu zavolat
ReleaseMutex. WaitForSingleObject proslo vzdy ale ReleaseMutex neuvolnilo
mutex. Teprve az pote co jsem zavolal ReleaseMutex tolikrat kolikrat jsem volal
WaitForSingleObject se mutex uvolnil a jiny thread ziskal jeho vlastnictvi.
Hm jen me zajimalo proc tomu tak je, takhle podobne by se meli chovat semafory
a ne mutexy nebo se pletu? Mam se vyvarovat toho abych v jednom vlakne volal
WaitForSingleObject bez ReleaseMutex?

diky

Odpovedá: Petr Fejfar

8. 6. 2004 10:44

Karel Plechota wrote:

> mam jen drobny dotaz, zkousel jsem v jednom threadu nekolikrat po
> sobe zavolat WaitForSingleObject pro mutex a pak jedenkrat v tom
> samem threadu zavolat ReleaseMutex. WaitForSingleObject proslo vzdy
> ale ReleaseMutex neuvolnilo mutex. Teprve az pote co jsem zavolal
> ReleaseMutex tolikrat kolikrat jsem volal WaitForSingleObject se
> mutex uvolnil a jiny thread ziskal jeho vlastnictvi.

viz doc:

While a thread has ownership of a mutex, it can specify the same mutex in
additional wait-function calls without blocking its execution. This prevents
a thread from deadlocking itself while waiting for a mutex that it already
owns. However, to release its ownership, the thread must call ReleaseMutex
once for each time that the mutex satisfied a wait.

HTH, pf